Bem-vindo(a) ao A Grande Transferência. Na programação de CPU, definimos como iterar; no GPGPU, definimos o que uma iteração parece ser. Esse deslocamento da lógica centrada em instruções para a lógica centrada em dados é impulsionado pela Abstração de Kernel.
1. O Projeto __global__
Ao usar o __global__ qualificador, você não está escrevendo uma função—está projetando um projeto escalável. A execução individual de um kernel representa uma unidade independente de trabalho, permitindo que a GPU orchestre milhares de tarefas idênticas em seu grande número de núcleos sem gerenciamento manual de threads.
2. O Resolvedor de Endereço Global
Como uma única thread entre milhões encontra seu alvo? Ela utiliza um contrato determinístico conhecido como fórmula de indexação:
$$\text{threadID} = \text{blockIdx.x} \times \text{blockDim.x} + \text{threadIdx.x}$$
Essa fórmula atua como um sistema de coordenadas, conectando os dados lógicos do software (o arranjo) à hierarquia física do hardware (blocos e threads).
3. Configuração de Execução
O <<<B, T>>> parâmetros definem a forma da grade. Isso garante Escalabilidade Transparente: seu código executa a mesma lógica independentemente de o hardware ter 2 SMs ou 80 SMs.